﻿#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QStyleOption>
#include <QPainter>

#include <QMenu>
#include <QAction>
#include <QMouseEvent>
#include <QPoint>
#include <QList>
#include <QLabel>
#include <QNetworkAccessManager>
#include "weathertool.h"
#include "WeatherData.h"
#include <QMessageBox>
#include <QUrl>
#include <QNetworkReply>
#include <QDebug>


#pragma execution_character_set("utf-8")

#define TEPERATURE_START_HIGH 43
#define SPAN_INDEX 2.2
#define ORIGIN_SIZE 3

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

protected:
    QList<QLabel*> forecast_week_list;      // 星期
    QList<QLabel*> forecast_date_list;      // 日期
    QList<QLabel*> forecast_aqi_list;       // 天气指数
    QList<QLabel*> forecast_type_list;      // 天气
    QList<QLabel*> forecast_typeIco_list;   // 天气图标
    QList<QLabel*> forecast_high_list;      // 高温
    QList<QLabel*> forecast_low_list;       // 低温


    // 重载绘画事件
    void paintEvent(QPaintEvent* event);
    // 重载鼠标右击目录,处理鼠标事件
    void contextMenuEvent(QContextMenuEvent *menuEvent);
    // 鼠标点击事件
    void mousePressEvent(QMouseEvent *event);
    // 鼠标移动操作事件
    void mouseMoveEvent(QMouseEvent *event);

private slots:
    void slot_exitApp();
    void replayFinished(QNetworkReply* reply);

    void on_toolButton_clicked();

    void on_toolButton_2_clicked();

private:
    QMenu *m_pMenu;             // 右击菜单指针
    QAction *m_pExitAct;        // 退出动作
    QPoint m_pos;               // 鼠标按下事件位置
    QNetworkAccessManager* manager; // 网络

    QString url;
    QString city;
    QString cityTmp;
    WeatherTool m_weatherTool;

    static const QPoint sun[2];
    static const QRect sunRiseSet[2];
    static const QRect rect[2];

    // 定时器
    QTimer* sunTimer;

    void getWeatherInfo(QNetworkAccessManager* manager);
    void parseToJson(QByteArray);
    // 设置当日labelcontent内容
    void setTodayLabelContent();
    // 设置预测labelcontent内容
    void setForecastLabelContent();
    // 绘制日出日落图
    void paintSunRiseSet();
    // 绘制温度折线图
    void paintWendu();
    // 事件过滤
    bool eventFilter(QObject* watched, QEvent* event) override;

    // 保存今天数据
    Today today;
    // 保存预测数据
    Forecast forecast[6];


    Ui::Widget *ui;
};
#endif // WIDGET_H
